--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / tests / backend / test_notification_unread_semantics.py
Displaying Raw • Download
tests/backend/test_notification_unread_semantics.py v4.7.0-rc.4 (448cd46c) Text, 3.22 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Unread semantics for conversations and the bell (no false positives)."""
Tff7b72from T7ee787datetime Tff7b72import Te6edf3UTCTb4b4b4, Te6edf3datetime
Tff7b72import T7ee787pytest
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3givenTb4b4b4, Te6edf3settings
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3strategies Tff7b72as Te6edf3st
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787lxmf_utils Tff7b72import Tb4b4b4(
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ff_rowTb4b4b4(Te6edf3incomingTb4b4b4, Te6edf3last_read_isoTb4b4b4, Te6edf3tsTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffis_incomingTa5d6ff"Tb4b4b4: Te6edf3incomingTb4b4b4,
Ta5d6ff"Ta5d6fflast_read_atTa5d6ff"Tb4b4b4: Te6edf3last_read_isoTb4b4b4,
Ta5d6ff"Ta5d6fftimestampTa5d6ff"Tb4b4b4: Te6edf3tsTb4b4b4,
Tb4b4b4}
Tff7b72class T56d364TestComputeLxmfUnreadFromRowTb4b4b4:
Tff7b72def Td2a8fftest_outgoing_never_unreadTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3base_ts Tff7b72= T79c0ff1_700_000_000.0
Tff7b72for Te6edf3last Tff7b72in Tb4b4b4(Tff7b72NoneTb4b4b4, Te6edf3datetimeTff7b72.Td2a8fffromtimestampTb4b4b4(Te6edf3base_ts Tff7b72- T79c0ff1Tb4b4b4, Te6edf3UTCTb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72assert Tb4b4b4(
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(
Te6edf3_rowTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3lastTb4b4b4, Te6edf3base_tsTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72is Tff7b72False
Tb4b4b4)
Tff7b72assert Tb4b4b4(
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(
Te6edf3_rowTb4b4b4(Tff7b72FalseTb4b4b4, Te6edf3lastTb4b4b4, Te6edf3base_tsTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72is Tff7b72False
Tb4b4b4)
Tff7b72def Td2a8fftest_incoming_unread_when_no_read_cursorTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72assert Tb4b4b4(
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(
Te6edf3_rowTb4b4b4(T79c0ff1Tb4b4b4, Tff7b72NoneTb4b4b4, T79c0ff1_700_000_000.0Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72is Tff7b72True
Tb4b4b4)
Tff7b72def Td2a8fftest_incoming_unread_when_bool_trueTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72assert Tb4b4b4(
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(
Te6edf3_rowTb4b4b4(Tff7b72TrueTb4b4b4, Tff7b72NoneTb4b4b4, T79c0ff1_700_000_000.0Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72is Tff7b72True
Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff200Tb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3tsTff7b72=Te6edf3stTff7b72.Td2a8fffloatsTb4b4b4(
Te6edf3min_valueTff7b72=T79c0ff1_000_000_000.0Tb4b4b4,
Te6edf3max_valueTff7b72=T79c0ff2_000_000_000.0Tb4b4b4,
Te6edf3allow_nanTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3allow_infinityTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3deltaTff7b72=Te6edf3stTff7b72.Td2a8fffloatsTb4b4b4(
Te6edf3min_valueTff7b72=T79c0ff1.0Tb4b4b4,
Te6edf3max_valueTff7b72=T79c0ff86_400.0Tb4b4b4,
Te6edf3allow_nanTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3allow_infinityTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_incoming_newer_than_read_always_unreadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3tsTb4b4b4, Te6edf3deltaTb4b4b4)Tb4b4b4:
Te6edf3read_at Tff7b72= Te6edf3datetimeTff7b72.Td2a8fffromtimestampTb4b4b4(Te6edf3ts Tff7b72- Te6edf3deltaTb4b4b4, Te6edf3UTCTb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)
Tff7b72assert Tb4b4b4(
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(
Te6edf3_rowTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3read_atTb4b4b4, Te6edf3tsTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72is Tff7b72True
Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff200Tb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3tsTff7b72=Te6edf3stTff7b72.Td2a8fffloatsTb4b4b4(
Te6edf3min_valueTff7b72=T79c0ff1_000_000_100.0Tb4b4b4,
Te6edf3max_valueTff7b72=T79c0ff2_000_000_000.0Tb4b4b4,
Te6edf3allow_nanTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3allow_infinityTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3deltaTff7b72=Te6edf3stTff7b72.Td2a8fffloatsTb4b4b4(
Te6edf3min_valueTff7b72=T79c0ff0.001Tb4b4b4,
Te6edf3max_valueTff7b72=T79c0ff86_400.0Tb4b4b4,
Te6edf3allow_nanTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3allow_infinityTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_incoming_older_or_equal_read_never_unreadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3tsTb4b4b4, Te6edf3deltaTb4b4b4)Tb4b4b4:
Te6edf3read_at Tff7b72= Te6edf3datetimeTff7b72.Td2a8fffromtimestampTb4b4b4(Te6edf3ts Tff7b72+ Te6edf3deltaTb4b4b4, Te6edf3UTCTb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)
Tff7b72assert Tb4b4b4(
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(
Te6edf3_rowTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3read_atTb4b4b4, Te6edf3tsTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72is Tff7b72False
Tb4b4b4)
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffparametrizeTb4b4b4(
Tb4b4b4(Ta5d6ff"Ta5d6ffincomingTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffexpect_unreadTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4[
Tb4b4b4(T79c0ff0Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4(T79c0ff1Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_sqlite_integer_incoming_flagsTb4b4b4(Te6edf3incomingTb4b4b4, Te6edf3expect_unreadTb4b4b4)Tb4b4b4:
Te6edf3row Tff7b72= Te6edf3_rowTb4b4b4(Te6edf3incomingTb4b4b4, Tff7b72NoneTb4b4b4, T79c0ff1_700_000_000.0Tb4b4b4)
Tff7b72assert Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(Te6edf3rowTb4b4b4) Tff7b72is Te6edf3expect_unread
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────